/**
 * Description:
 * Class Name:MyUtils
 * Date:2022/3/25 10:43
 *
 * @author LTisme
 * @version JAVA17
 */
package 疯狂Java讲义.第9章_泛型._9_3_类型通配符._9_3_3_设定类型通配符的下限;

import java.util.ArrayList;
import java.util.Collection;

public class MyUtils {
    // 下面dest集合元素的类型必须与src集合元素的类型相同，或者是父类
    public static <T> T copy(Collection<? super T> dest, Collection<T> src){
        T last = null;
        for (var ele :
                src) {
            last = ele;
            // 逆变的泛型集合添加元素是安全的
            dest.add(ele);
        }
        return last;
    }

    public static void main(String[] args) {
        var ln = new ArrayList<Number>();
        var li = new ArrayList<Integer>();
        li.add(5);
        // 此处可以准确地知道最后一个被复制的元素是Integer类型
        // 与src集合元素的类型相同
        var last = copy(ln,li);                         // 使用这种语句就可以保证程序推断出最后一个被复制的元素类型的Integer，而不是笼统的Number
        System.out.println(ln);
    }
}
